﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaPresentacion.Commands;
using CapaPresentacion.Vistas;
using Entidades;
using CapaLogica;
using System.Windows.Input;
using System.Windows;
using System.Windows.Data;
using System.Transactions;
using CapaPresentacion.Controles;

namespace CapaPresentacion.Vistas
{
    class VentanaBusquedaAlumnoViewModel
    {

        public event EditarEntidad EditarEntidad;

        private RelayCommand buscarAlumnoCommand;
        private RelayCommand editarAlumnoCommand;
        private RelayCommand eliminarAlumnoCommand;

        private string dni;
        private string nombre;
        private string apellido;
        private Guid idSeleccionado;

        public string Dni
        {
            get { return dni; }
            set { dni = value; }

        }

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }

        }

        public string Apellido
        {
            get { return apellido; }
            set { apellido = value; }
        }


        public List<ViewEntity> ListaAlumnos { get; set; }

        public Guid IdSeleccionado
        {
            get { return idSeleccionado; }
            set { idSeleccionado = value; }
        }

        public ICommand BuscarAlumnoCommand
        {
            get
            {
                return buscarAlumnoCommand;
            }
        }

        public ICommand EditarAlumnoCommand
        {
            get
            {
                return editarAlumnoCommand; 
            }
        }

        public ICommand EliminarAlumnoCommand
        {
            get
            {
                return eliminarAlumnoCommand;
            }
        }

        private VentanaBusquedaAlumno view;


         public VentanaBusquedaAlumnoViewModel() { }

        public VentanaBusquedaAlumnoViewModel(VentanaBusquedaAlumno vista)
        {
            this.view = vista;
            this.buscarAlumnoCommand = new RelayCommand(BuscarAlumno);
            this.editarAlumnoCommand = new RelayCommand(EditarAlumno);
        }

        public VentanaBusquedaAlumnoViewModel(VentanaBusquedaAlumno vista, string eliminar)
        {
            this.view = vista;
            this.buscarAlumnoCommand = new RelayCommand(BuscarAlumno);
            this.editarAlumnoCommand = new RelayCommand(EditarAlumno);
            this.eliminarAlumnoCommand = new RelayCommand(EliminarAlumno);
            this.view.btnCargar.Visibility = Visibility.Collapsed;
            this.view.btnEliminar.Visibility = Visibility.Visible;
            this.view.titulo.Content = "Eliminar Alumno";
        }

         private void BuscarAlumno(Object parameter)
         {
             if (!String.IsNullOrWhiteSpace(this.dni) || !String.IsNullOrWhiteSpace(this.nombre) || !String.IsNullOrWhiteSpace(this.apellido))
             {

                 ListaAlumnos = new AlumnoLogica().ObtenerEntidadesParaEditar(this.dni, this.nombre, this.apellido);

                 if (ListaAlumnos != null && ListaAlumnos.Count > 0)
                 {
                     this.view.listaDatos.ItemsSource = ListaAlumnos;
                     this.view.panelResultados.Visibility = Visibility.Visible;
                     this.view.lblNoRecords.Visibility = Visibility.Collapsed;
                     this.view.lblRecordNoSelected.Visibility = Visibility.Collapsed;
                 }
                 else
                 {
                     this.view.panelResultados.Visibility = Visibility.Collapsed;
                     this.view.lblNoRecords.Visibility = Visibility.Visible;

                 }

             }
             else
             {
                 VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe completar al menos uno de los filtros");
                 nueva.ShowDialog();
                 
             }
         }

         private void EditarAlumno(Object parameter)
         {

             if (this.idSeleccionado != Guid.Empty)
             {
                 this.view.lblRecordNoSelected.Visibility = Visibility.Collapsed;

                 Alumno entidad = new AlumnoLogica().ObtenerEntidadParaEditar(idSeleccionado);
                 this.EditarEntidad(CasosDeUso.NuevoAlumno, entidad);
                 this.view.Close();

             }
             else
             {
                 this.view.lblRecordNoSelected.Visibility = Visibility.Visible;
             }
             
         }

         private void EliminarAlumno(Object parameter)
         {

             if (this.idSeleccionado != Guid.Empty)
             {
                 if (MessageBox.Show("¿Está seguro que desea eliminar los datos del alumno seleccionado?", "Confirme su Decisión", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
                 {
                     this.view.lblRecordNoSelected.Visibility = Visibility.Collapsed;

                     if (!new InscripcionAlumnoLogica().ExisteInscripcionAlumno(this.idSeleccionado))
                     {

                         Alumno entidad = new AlumnoLogica().ObtenerEntidadParaEditar(idSeleccionado);

                         try
                         {
                             new AlumnoLogica().EliminarRelacionesFamiliares(entidad.LegajoAlumno);
                             entidad.Eliminado = true;
                             new AlumnoLogica().Modificar(entidad);

                             VentanaAviso nueva = new VentanaAviso(false, "Finalización exitosa", "El alumno seleccionado ha sido eliminado");
                             nueva.ShowDialog();

                             this.view.Close();
                         }
                         catch (Exception)
                         {

                             VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "  Ha ocurrido un error y el alumno no se ha eliminado");
                             nueva.ShowDialog();

                         }
                     }
                     else
                     {
                         VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "No es posible eliminar un alumno que está inscripto a algún ciclo lectivo");
                         nueva.ShowDialog();

                     }
                 }
             }
             else
             {
                 this.view.lblRecordNoSelected.Visibility = Visibility.Visible;
             }


         }





    }
}
